﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Persistencia;
using GestorDeFlotasModelo.Factorias;
using Persistencia.Interfaces;

namespace GestorDeFlotasModelo.Entities
{
    public partial class Usuario : IPersistibleModelo, IIdentityEntity
    {
        PersistibleDB persistible;
        #region Miembros de IPersistibleModelo

        void IPersistibleModelo.CargarParametrosClave(HashTableNCSensitive parameters)
        {
            parameters.Add("Usuario_Id", this.Id);
        }

        void IPersistibleModelo.CargarParametrosNoClave(HashTableNCSensitive parameters)
        {
            parameters.Add("Usuario_Username", this.Username);
            parameters.Add("Usuario_Password", this.Password);
            parameters.Add("Usuario_Habilitado", this.Habilitado);
            parameters.Add("Usuario_IntentosFallidos", this.IntentosFallidos);
            parameters.Add("Usuario_AvisadoInconsistencias", this.AvisadoInconsistenciasViajes);
            
        }

        void IPersistibleModelo.Cargar(HashTableNCSensitive hts)
        {
            this.Id=int.Parse(hts["Usuario_Id"].ToString());
            this.Username = hts["Usuario_Username"].ToString();
            this.Password = hts["Usuario_Password"].ToString();
            this.Habilitado = bool.Parse(hts["Usuario_Habilitado"].ToString());
            this.IntentosFallidos = int.Parse(hts["Usuario_IntentosFallidos"].ToString());
            this.AvisadoInconsistenciasViajes = bool.Parse(hts["Usuario_AvisadoInconsistencias"].ToString());
            this.Roles = ((IPersistibleModelo)this).Persistible.Transaccion.Factoria<FactoriaRolPorUsuario>().SelectRolPorUsuario(this);

        }

        void IPersistibleModelo.AntesInsert() { }

        void IPersistibleModelo.AntesUpdate() { }

        void IPersistibleModelo.AntesDelete() { }

        void IPersistibleModelo.DespuesInsert() { }

        void IPersistibleModelo.DespuesUpdate() { }

        void IPersistibleModelo.DespuesDelete() { }

        string IPersistibleModelo.HashDatos
        {
            get 
            { 
                return this.Id+this.Username+this.Password+this.Habilitado+this.IntentosFallidos+this.AvisadoInconsistenciasViajes; 
            }
        }

        PersistibleDB IPersistibleModelo.Persistible
        {
            get
            {
                return this.persistible;
            }
            set
            {
                this.persistible = value;
            }
        }

        #endregion

        #region Miembros de IPersistible

        void IPersistible.Insert()
        {
            this.persistible.Insert();
        }

        void IPersistible.Update()
        {
            this.persistible.Update();
        }

        void IPersistible.Delete()
        {
            this.persistible.Delete();
        }

        #endregion
    }
}
